23

» WarCraft 3 / Блокиратор пути

Похожие вопросы:

ответ
сдается мне, что это не возможно без костылей, или же эту фичу юзали все картоделы :\
можно приподнимать декорации с помощью cntrl или shit + page down/page up, но это сугубо визуально, физически они будут все равно размещены внизу
на ум приходит только установка необходимой высоты всем проходящим по верхней стороне юнитам, но там будет другой геморрой (к примеру, если по мосту бежит несколько пехотинцев, враждебных друг другу, пехотинцы на верхней стороне не смогут быть атакованы, так как будут считаться "летающими")
ответ
Sergey103, для этого выбери один блокиратор, потом нажми на "Правка" и нажми "Выбрать все особые", потом просто удали их.
ответ
Steal nerves:
Все разобрался, я с обычной декорации сильно протупил, невнимательность.
Еще нашел другой способ, см. карту
ответ
Steal nerves:
Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
Как запретить перемещаться:
  1. Блокираторы пути. Есть баги короче xgm.guru/p/wc3/181384
  2. см. карту SetPathingRect (скачал с хайва)
ответ
Уменьшить скорость, и каждый маленький отрезок пути проверять проходимость пути. Если непроходим, то остановить способность.

23

» WarCraft 3 / Интерфейс

Похожие вопросы:

ответ
Заменим, только без внешнего софта новые элементы не добавить, но стандартыне редактируются в FDF
ответ
Нет
ответ
Viktor19:
кук пытается тебе втолковать, что неизвестный тип атаки - это технический тип урона, он используется для реализации стандартных спеллов и детектов дебаффа
Обычному юниту такой урон не поставить, как и тип защиты
ответ
Нет. Во вкладке интерфейс вы можете посмотреть все, что можете поменять

23

» WarCraft 3 / Канал

Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Канал

Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Затемнение

Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
Так?
ответ
TripleKor:
Модель света и триггер способности:
Проверку на уровень можешь убрать и крепить ещё один источник просто с изучением способности.
источник света не работает
ответ
есть триггер Спецэффекты - Fade Filter
ответ
XGM Bot:
Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
есть триггер Спецэффекты - Fade Filter
ответ
Зайти в кампанию и посмотреть. Не?


23

» WarCraft 3 / Стены

Похожие вопросы:

ответ
Исправляется путем вставки иной точки вместо Point1, к примеру на TempPoint, в триггере, что вызывается интервалом.
Вот исправленный вариант твоей ужасосистемы... и как писал тут дадька nvc123:
вот только эта система генерирует точки кучами
На что ты должен обратить внимание в первую очередь!
И забыл написать, что так же последняя пуля тоже не учитывается. Лечится прямыми руками и внимательным чтением ресурсов данного сайта. Ибо тем по этому поводу тут полно...
ответ
~16GB:
Создаёт стену из магического льда, которая отталкивает противников от себя.
function IsUnitDeadBX takes unit u returns boolean
return GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)
endfunction

function IsTarget takes unit u,unit d returns boolean
return not IsUnitType(u,UNIT_TYPE_ANCIENT) and not IsUnitDeadBX(u)  and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and (IsUnitEnemy(u, GetOwningPlayer(d)) or GetOwningPlayer(u) == Player(15))
endfunction

function SQ takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function SafeX takes real pxx returns real
local real lfr=GetRectMinX(bj_mapInitialPlayableArea)+50
if(pxx<lfr)then
return lfr
endif
set lfr=GetRectMaxX(bj_mapInitialPlayableArea)-50
if(pxx>lfr)then
return lfr
endif
return pxx
endfunction

function SafeY takes real pyy returns real
local real lfr=GetRectMinY(bj_mapInitialPlayableArea)+50
if(pyy<lfr)then
return lfr
endif
set lfr=GetRectMaxY(bj_mapInitialPlayableArea)-50
if(pyy>lfr)then
return lfr
endif
return pyy
endfunction

function UBU takes unit u, unit d, unit c , real w returns boolean
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real r1 = 57.295827*Atan2(y-GetUnitY(d),x-GetUnitX(d))
local real r2 = 57.295827*Atan2(y-GetUnitY(c),x-GetUnitX(c))
set r2 = r2 -180
if r1 < 0.00 then
set r1 = r1 + 360
endif
if r2 < 0.00 then
set r2 = r2 + 360
endif
if r1 - r2  <= w and r1 - r2  >= -(w) then
return true
else
return false
endif
endfunction


function IceWallCon takes nothing returns boolean
return GetSpellAbilityId() == 'A0KP'
endfunction

function IceWallCreate takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit c = LoadUnitHandle(udg_AssassinHash,id,0)
local real r = LoadReal(udg_AssassinHash,id,3)
local integer i = LoadInteger(udg_AssassinHash,id,4)
local integer j = LoadInteger(udg_AssassinHash,id,5)
local real x = LoadReal(udg_AssassinHash,id,StringHash("X"))
local real y = LoadReal(udg_AssassinHash,id,StringHash("Y"))
local real a = 0.
local real b = 0.
local boolean e = LoadBoolean(udg_AssassinHash,id,6)
local boolean f = LoadBoolean(udg_AssassinHash,id,7)
local boolean k = LoadBoolean(udg_AssassinHash,id,8)
local integer n = LoadInteger(udg_AssassinHash,id,25)
local real X2 = LoadReal(udg_AssassinHash,id,StringHash("X2"))
local real Y2 = LoadReal(udg_AssassinHash,id,StringHash("Y2"))
local real X3 = LoadReal(udg_AssassinHash,id,StringHash("X3"))
local real Y3 = LoadReal(udg_AssassinHash,id,StringHash("Y3"))
local integer h = 0
local group g = LoadGroupHandle(udg_AssassinHash,id,2)
local unit u
local unit d
local unit d1
if e == false then
set i = i+1
set j = j+1
if i < 7 then
set a = SafeX(x+(80.*i)*Cos(r))
set b = SafeY(y+(80.*i)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(i)),d)
set a = SafeX(x-(80.*j)*Cos(r))
set b = SafeY(y-(80.*j)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)),d)
call SaveInteger(udg_AssassinHash,id,4,i)
call SaveInteger(udg_AssassinHash,id,5,j)
else
call SaveBoolean(udg_AssassinHash,id,6,true)
endif
else
if f == false then
call SaveInteger(udg_AssassinHash,id,4,0)
call SaveReal(udg_AssassinHash,id,3,r-1.566)
call TimerStart(t,.025,true,function IceWallCreate)
call SaveBoolean(udg_AssassinHash,id,7,true)
else
set i = i+1
if i < 201 then
call SaveInteger(udg_AssassinHash,id,4,i)
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU16"))
set d1 = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU26"))
call GroupClear(udg_G)
call GroupEnumUnitsInRange(udg_G,x,y,1040,null)
loop
set u = FirstOfGroup(udg_G)
if IsTarget(u,c) and UBU(u,d,d1,20.) and IsUnitInGroup(u,g) == false then
call GroupAddUnit(g,u)
if GetUnitAbilityLevel(c,'B009') > 0 then
call UnitDamageTarget(c,u,150.+80.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(c,u,75.+40.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
set n = n+1
call SaveInteger(udg_AssassinHash,id,25,n)
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(n)),15)
if SQ(X3,Y3,GetUnitX(u),GetUnitY(u)) > SQ(X2,Y2,GetUnitX(u),GetUnitY(u)) then
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,20))
else
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,21))
endif
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(n)),u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\FrostArrows\\NagaColdArrowMissile.mdl",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) or not IsTarget(u,c) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
else
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
if k == false then
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"))
call KillUnit(d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call SaveBoolean(udg_AssassinHash,id,8,true)
endif
if k and n <= 0 then
call DestroyGroup(g)
call DestroyTimer(t)
call FlushChildHashtable(udg_AssassinHash,id)
endif
endif
endif
endif
set t = null
set c = null
set d = null
set d1 = null
set g = null
set u = null
endfunction

function IceWall takes nothing returns nothing
local unit c =  GetSpellAbilityUnit()
local real a = GetUnitX(c)
local real b = GetUnitY(c)
local real x = SafeX(GetSpellTargetX())
local real y = SafeY(GetSpellTargetY())
local real r = Atan2(y-b,x-a)+1.566
local timer t = CreateTimer()
local real dist = SQ(a,b,x,y)*2.
local integer id = GetHandleId(t)
local unit d
set d = CreateUnit(GetOwningPlayer(c),'e00V',x,y,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"),d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",x,y))
call SaveUnitHandle(udg_AssassinHash,id,0,c)
call SaveReal(udg_AssassinHash,id,3,r)
set r = Atan2(y-b,x-a)
call SaveReal(udg_AssassinHash,id,20,r)
call SaveReal(udg_AssassinHash,id,21,Atan2(b-y,a-x))
call SaveReal(udg_AssassinHash,id,StringHash("X2"),a+dist*Cos(r))
call SaveReal(udg_AssassinHash,id,StringHash("Y2"),b+dist*Sin(r))
call SaveReal(udg_AssassinHash,id,StringHash("X3"),a)
call SaveReal(udg_AssassinHash,id,StringHash("Y3"),b)
call SaveGroupHandle(udg_AssassinHash,id,2,CreateGroup())
call SaveReal(udg_AssassinHash,id,StringHash("X"),x)
call SaveReal(udg_AssassinHash,id,StringHash("Y"),y)
call TimerStart(t,.025,true,function IceWallCreate)
set t = null
set c = null
set d = null
endfunction
ответ
Грубый пример:
Событие - постройка завершена
Действие: Если тип юнита (построенное здание) = стена,
то установить переменую-точку = позиция (построенного здания),
удалить (построенное здание)
создать декорацию типа "Стена-декорация" в точке-переменной
удалить точку

Пишу с работы, редактора под рукой нет. Прошу за ошибки и неточности простить))
ответ
RedLegion:
dave_wwid:
Есть статья в базе
Basile2:
Текстуру перерисуй и будет счастье
Не силён в таких делах. Хотелось просто и без гемора найти модель. Видел на картах есть такие, но увы они запротекчены.
Открой прогой mpq editor

23

» WarCraft 3 / Не получать опыта за героя

Похожие вопросы:

ответ
Так?
ответ
закрыт по таймауту
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

23

» WarCraft 3 / Опыт

Похожие вопросы:

ответ
При убийстве дракона поставить проверку условия, что убивающий юнит принадлежит красному игроку.
А в действиях - 2 варианта.
Вариант 1. Триггерно уменьшить опыт убивающему герою на количество, равное данному за убийство.
Но если уровень повысится - точно не знаю, сработает ли.
Вариант 2. Убрать в РО опыт за убийство и добавлять его убивающему герою триггерно.
Лучше использовать второй.
WarSC:
Легко
Так написал бы ответ, раз легко )
Человек за помощью обратился всё же.
ответ
Порылся в игровых константах (Вкладка "Дополнительно"). Если изменить указанный пункт, можно задать часть получаемого опыта при отрыве уровня героя. Если поставить все числа 100, то всегда будет даваться полный объем опыта. Можно поставить последнее число 50, тогда при большом отрыве уровней, будет даваться только половина опыта. Как-то так. Могу ошибаться
ответ
А исправить эти его "тупые" действия никак нельзя?
переписать ai скрипты
он хранится в mpq архивах в файлах с расширением .ai
например аи для людей хранится в файле human.ai
ответ
игровые константы - опыт: общее распределение - поменяй на "нет"....

23

» WarCraft 3 / Предметы

Похожие вопросы:

ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
Melissa:
а какая способность у этого предмета?
Разобрался с этой проблемой.
ответ
~8gabriel8:
GingerAlice, перейти на вкладку Способности, открыть Особые->Предметы, там найти "Дух-целитель (предмет)" и поставить своё время.
ответ
~8gabriel8:
У меня был вопрос с проигрыванием анимаций моделью предмета, но ответили, что нельзя предметам анимации проиграть. Можно так сделать (это то, что имел ввиду Diaboliko, просто немного подробнее расписано):
  • Берёшь модель с нужным трупом;
  • Открываешь её в mdlvis или w3me;
  • Если в mdlvis, то заходишь в редактор анимаций (F3) и оставляешь только анимацию с трупом;
  • Если в w3me, то Windows->Sequence Manager и опять же удаляешь все анимации кроме трупа;
  • Переименовываешь на всякий случай анимацию с трупом в Stand;
  • Импортируешь модель в карту и назначаешь её предмету;
  • У такой модели останется куча ненужной информации, например, текстуры от живой модели, но может быть сам сможешь это удалить.

23

» WarCraft 3 / Unit атакует?

Похожие вопросы:

ответ
Ох уж эти отловы урона
ответ
событие - юнит получает урон
условие - юнит получивший урон имеет баф (баф стрелы)
Pippetz, лучше не яд а ледяные стрелы
ответ
было бы круто если бы ты их вспомнил а то я уже собираюсь весь ии переписать
ответ
Вместо
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter) 
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
сделай так:
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) //function CreepSpellFilter
    call TriggerAddCondition(gg_trg_CreepSpell, Condition(function CreepSpellFilter))
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
и вот здесь:
if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
		call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        set Dummy = null
    endif
поменяй местами IssuePointOrder и UnitApplyTimedLife, чтобы было вот так:
    if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        set Dummy = null
    endif

23

» WarCraft 3 / Авто-каст

Похожие вопросы:

ответ
Ну, это просто - берёшь и вспоминаешь все необычные карты. Комуниздишь. Профит.
Для инкома можно сделать зависимость от типа ландшафта. Например, чтобы добывали только на мелководье. Или если возле этого здания есть деревья. Или увеличивать инком в зависимости от кол-ва деревьев рядом. Соответственно, ддеревья можно заменить на другие здания, шахты с золотом и вообще на что угодно. Запилить риск и смотреть кол-во войск возле города.
Можно дать расе ферму, на которой игрок будет производить овец/поросят/людишек и забивать их на мясо. Ну или просто быть источником инкома, который бродит где попало.
Можно запилить фракцию варваров, которые будут добывать золото только убивая и ломая здания.
Можно сделать так, чтобы получаемый героем опыт конвертился в золото. И при покупках/постройках тратился.
ответ
Это неважно 2 или 8895465, все что вам нужно это отловить урон в 0.0 ед. от лица того кто кастует стрелы или врубил автокаст и атакует, а так же проверить на бафф стрел, если бафф стрел есть и юнит получил 0.00 ед. урона то в него прилетала стрела от автокаста...
ответ
Заняться все равно было нечем, поэтому я сделал все за тебя
ответ
на основе эксгумация труповозок можно сделать пасивки с колдаунами
вот наработка
ответ
Хоспаде. Вынеси свою лучницу в отдельную карту. У тебя же чёрт ногу сломит.

Не знаю, у меня автокаст нормально перезаряжается. Возможно, дело в основе. Попробуй дать не "Ледяные", а "Огненные стрелы".
Вот. Забыл прикрепить.
А может быть, дело в том, что твоя лучница - "Здание". Честное слово, это три самые замороченные способности у близзард: "Огненные", "Отравленные" и "Ледяные" стрелы. На первый взгляд они одинаковые, но стоит присмотреться... Ух!

23

» WarCraft 3 / музыка на экране кампании

Похожие вопросы:

ответ
Никак. Это должна быть не музыка, а фоновые звуки.
ответ
~8gabriel8:
Вряд ли этот вопрос решится, можно его просто удалить, а не закрывать?

23

» WarCraft 3 / Меню паузы

Похожие вопросы:

ответ
А приказ остановиться не пробовали?
ответ
Создать список "станящих" баффов, при потере баффа из этого списка проверять есть у юнита еще какой либо бафф из списка.
Если нет - снимать паузу, если есть - ничего не трогать.
ответ
Отвечу вместо бота: xgm.guru/p/wc3/multiboard3
ответ
Steal nerves:
переходишь на jass? немного посмотри примеры и почитай статьи. набери в поиск таймеры + хэш-таблица и прочее
раскрыть
На триггерах это будет глупо и неудобно. Нужно создать или хотя бы иметь существующий таймер, потом запустить в определенный момент. Но для начала нужно сохранить данные, с которыми будешь взаимодействовать (например, юнит). К примеру дали пассивный скилл, через 5 минут удалил.
есть несколько способов, это запускать таймер. А другим триггером отлавливать с помощью события завершения времени таймера. Или вызывать напрямую функцию.
используется нативка
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
или это. здесь функцию не вызывают, а просто запускают таймер. Завершение таймера отлавливают с помощью другого триггера. Очень неудобно
function StartTimerBJ takes timer t, boolean periodic, real timeout returns timer
    set bj_lastStartedTimer = t
    call TimerStart(t, timeout, periodic, null)
    return bj_lastStartedTimer
endfunction
ответ
конвертнуть путь иконки в переменную типа строчки и уже в таблице использовать переменную как путь

23

» WarCraft 3 / Что делать с этим багом?

Похожие вопросы:

ответ
Ну, если дать неуязвимому даммику, то у них тоже приказ сбивается?
ответ
Проблема решена. Обнаружилась довольно неожиданно - заметил, что во время крита герой не разбивал лицо сам себе, начал искать модификаторы атаки - у героя было 3 пустышки с нулевыми значениями на основе "ракет". При всех пустых значениях вылетает невидимая ракета по самому себе.
ответ
Советую проверять бекапы один за другим, и в том, в котором впервые возникает такая проблема, и искать ошибку, она наверняка где-то в изменениях относительно хронологически предыдущей версии.
ответ
Sasha166:
Да там есть спец. эф в заклинаниях "похитить" называется.
Должна сфера появится, типа душа.
В карте, что я прикреплял сюда она есть, и как-то тоби сделал, что их создавалось не по 20 штук, а только одна.
Ну и не только атака должна отниматься, но у хп реген.
Ну а так-то пример хороший, и понятно что делать, в том случае, если захочу делать больше уровней для способности.
Пере заливаю.
molot39:
Что нужно для ГУИ:
  1. Способность - 3 шт.
  • для героя (любая пустая аура, или же можно пасивку)
  • 2 способности для атрибутов, для атаки 20 уровней (20 душ) и для регена 30 уровней (30 душ)
  1. Если у нас аура, то заклинание с иконкой и описанием
  1. Сам герой со одной способностью (аура или пасива)
  1. Триггер - 1 шт.
Скрин
Где стоит условие (убийца) имеет баф, можно поставить уровень убийцы больше или равно 1, если у нас пасива.
Что получается, если мы убиваем первого героя имея способность, получаем способность и уровень становится 1, последующие убийства увеличивают уровень, через условие не даем повышать ненужные уровни, убивают нас, способности теряем.
Так же можно добавить эффекты, через дамми или же что нить ещё, и когда нас убивают наносим урон всем через способность "взрыв", который так же повышается уровнями (душами) как и остальные. Взрыв можно сделать как через дамми, так и дать закрытую способность самому герою и активировать взрыв при смерти.
Не каких фиксаций, гемора и утечек.
Болванка прилагается.
Автору совет, или же урок:
Смотри как делают другие, и ломай голову как это можно сделать по своему уникально, возможно проще и оптимальнее.
Спасибо всем.
Или же в перекрепленных файлах.
ответ
Свойства карты - Параметры - Нестандартное звуковое окружение. Там посмотри.

23

» WarCraft 3 / Утечки

Похожие вопросы:

ответ
Какой ужас
Делай вот так.
бронепоезд
создать.
направить на 128 точек наверх(90)
сделать неперманентным
текст удалится через 3 секунды
текст затухнет до 100% прозрачности через 3 секунды
Вот чёрт. не успел приплюснуть к посту.
ответ
о чем нужно заботиться:
ты создаешь объекты, к которым больше никогда не обратишься. например, локацию, или триггер, который один раз отработал и больше не нужен. представь, что это юнит, который стоит за картой. да, он в игре не участвует, но нахера он стоит?
утечка и есть такой юнит. Не страшно, если оно есть. не страшно, если у тебя счетчик хендлов зашкаливает. наличие утечек не мешает уничтожить объект - просто его хендл не вернется в общий стек. Позаботься, что ты уничтожаешь все ненужные объекты, а утечки можешь особо и не считать.

23

» WarCraft 3 / Утечки группы.

Похожие вопросы:

ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
ответ
тебе для начала надо научится пользоваться группами
прочти статьи ибо ты написал бред в вопросе
ответ
Вот как должен выглядеть полностью правильный триггер без утечек, единственная утечка создастся только при первом использовании, это я так понял переменная группы, ее обнулять нельзя, иначе скил будет работать только раз.
ответ
quq_CCCP:
Спасибо, понял что надо создавать форс единожды, чтобы утечек не было
Мдаа уж, оказывается все дело в том, что забыл поставить исходные позиции другим игрокам, хорошо хоть проверить догадался, засиделся за редактором
ответ
А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.

23

» WarCraft 3 / Столкновения юнитов

Похожие вопросы:

ответ
Ledon, взять нативки и написать используя левую и правую руки
ответ
Steal nerves:
K0META, ты прав. проверил. короче еще с этим нужно карту пути скопировать у портала и вставить в поле вашего здания.
через триггеры это раздел "Боевая единица" - Set Unit Collosion Off
ответ
способ 1
вешать структуру на таймер с помощью эксплойта (для тех кто не знает структура это число) а потом этим таймером вызывать нужную функцию спустя 0 секунд
плюсы:
простота
минусы:
требует добавлять иф на каждую новую функцию
второй способ
тоже самое что и 1 только на таймер вешается вдобавок название функции и таймер вызывает её экзекутом
вот моя библиотека по 2 способу и карта с примером
в библиотеке в самом верху есть небольшой док по 3 функциям
ответ
самый простой способ, будет падать без ускорения со скоростью 600
в функцию которая меняет высоту юнита передается два числа, первое высота а второе скорость
здесь я сперва поднял грифона на высоту 1000 мгновенно (скорость 0), а затем роняю его на высоту 0 со скоростью 600
ответ
виндволк в помошь

23

» WarCraft 3 / Изменить тип юнита

Похожие вопросы:

ответ
Прятать юнита, создавать дамми с нужными способностями. Если никто не сделает, возможно вечером попытаюсь (сейчас у меня утро) сделать.
ответ
Вот обновленная версия на структурах, я её вроде выкладывал...
либо используйте CreateCreepOfType для создания крипов, так будет респаунить тока тех крипов которых вы создали этой функцией...
ответ
У каждого типа атаки должны быть свои допустимые цели, без пересечений.
ответ
Dota_2015, с какого перепугу ATTACK_TYPE_MAGIC урон от заклинаний? у заклинаний тип атаки ATTACK_TYPE_NORMAL, а у тебя это магическая атака волшебниц да прочей шушеры из кампании, наносит 75% урона про героям и доп урон по тяжёлой броне, маг. резистами не режится ибо физический урон от атаки.
У всех заклинаний, да блин даже у долбаных мин гоблина - тип атаки ATTACK_TYPE_NORMAL.
ответ
там в дополнительных функциях есть функция изменения масштаба эффекта

23

» WarCraft 3 / Защита карты

Похожие вопросы:

ответ
никак
ответ
Ну да, после этого в редакторе карт не откроешь. Но им и никто не пользуется для этого, когда есть MPQ Editor.
ответ
lll_Kirito_lll:
Хочется иметь у себя только модель допустим )
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
ответ
Tumart:
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
 call  BJDebugMsg( I2Sx( 100500  ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте.
I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку.
вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... )
функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
    local integer i = 486
    local string str = null
    set str = S2S( I2SH( i ) )
    call BJDebugMsg( str )
    set str = null
endfunction

//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
    set gg_trg_J_Test = CreateTrigger(  )
    call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
    call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
ответ
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.

23

» WarCraft 3 / Усиление заклинаний

Похожие вопросы:

ответ
если цель точка то на кого он баф повешает?
на точку?
или он должен прочесть твои мысли чтобы знать кого бафать
Триггерно UnitAddAbility (unit, 'ай-ди баффа') - не работает.
и не должно работать
для бафов нужен дамикаст
например чтобы повесить кровожадность создаёшь дами юнита со скилом кровожадность и приказываешь кастануть его на юнита
потом убираешь дами юнита

23

» WarCraft 3 / Может ли вылетать карта из-за этого триггера?

Похожие вопросы:

ответ
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка
Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек

23

» WarCraft 3 / Как сделать чтобы предмет ''Стрелял''

Похожие вопросы:

ответ
Если это кому-то ещё интересно - я нашёл простое решение. Условие - юнит не умеет сражаться в ближнем бою и может атаковать исключительно при наличии стрел. Полагаю изначальный вопрос именно это подразумевал.
-Нужно дать юниту способность предметы(герой). Установить в РО юниту: Бой-атака1-допустимые цели-Нет.
-Н настроить все нужные данные во второй атаке. Не забыв указать тип атаки и тип оружия.
-Стрелы сделать на основе предмета огненного шара (и иже с ним).
-Взять какую-нибудь наработку для стака предметов. Чтобы подбирая стрелы они складывались в инве у юнита в одну ячейку.
-Использовать триггер, для того, чтобы стрелы расходовались:
События:
-Unit Атакован.
Условия:
-Unit-Type of Atacking Unit равно <нужный тип войск(лучники)> Через Or можно ввести несколько типов юнитов
Действия:
-Предмет - Set charges remaining in (Item carried by (attacking unit) of type <наши стрелы>) - выбираем arithmetic, выбираем в нём то же - Set charges remain... ставим знак минус и выбираем 1.
в спиcке чарджз ремеининга выбрать Item carried by Hero of Type назначить вместо героя тип атакующего юнита и указать тип артефакта.
Теперь нужно сделать, чтобы стрелы, после того, как кончатся, однозначно исчезли из инвентаря боевой единицы.
-If/then/else
указать условие integer compasion set charges... (всё точно как в предыдущем действии) меньше 1
то
-Предмет - remove (Item cerried By (Attacking unit) of type <стрелы>)
иначе Do nothing
ответ
дак можно же выключить нужный триггер на время замены, и сразу после неё включать

23

» WarCraft 3 / ИИ не использует скилы

Похожие вопросы:

ответ
GF RaiseD:
Лучше дамажить триггерно и подгонять эффекты. Ибо тот способ что ты юзаешь сейчас - срань. Лучше подучить Jass чтобы нормально удалять группы и точки.
ответ
Alexander69, посмотри здесь.
Clamp, ему юнит нужон.
ответ
Все, финальный вариант, починил высоту и сделал много камней, только спускаться пока можно
ответ
quq_CCCP:
Спасибо, понял что надо создавать форс единожды, чтобы утечек не было
Мдаа уж, оказывается все дело в том, что забыл поставить исходные позиции другим игрокам, хорошо хоть проверить догадался, засиделся за редактором
ответ
ии я очень сложный замутил 4х ступенчатый (не для босов)так как при строительстве его я думал что движок будет пулять спеллы,его придёться переписывать,но я нашел решение если за моба стоит комп то спелы во вкладке нейтрально посивные он будет юзать но не все главное условие чтобы был комп назначен